昨天我們昨天我們將Filebeat也作為一個Container啟動,因此不管是網頁系統的後端程式、Nginx以及蒐集Log的Filebeat我們都將它容器化,並且透過volume以及內部port讓他彼此聯繫。另外因為我們的ELK是在雲端上,因此不需要再開啟ELK的服務,否則Elasticsearch以及Kibana可能都需要再開一個container。今天我們要來講透過filebeat以及之前的建構,一次蒐集很多種的log。
今天我們要來思考一下,前面幾天我們都是蒐集nginx的log,那我們如果今天我們想要除了nginx log外,也想知道目前container硬體健康狀況,或是系統穩定度的部分,那我們除了nginx log外勢必需要其他的log。
而需要其他log,我們難道是要多開幾個filebeat的container去做蒐集嗎?
其實filebeat的listen是可以設置多重的,意思是可以一次enable多個moudle,而透過enable多個module,filebeat就可以一次監聽多個路徑。
因此以我們這個服務為範例,我們只需要將filebeat的container設定多開幾個模組,並且給予他設定檔。
另外就是多設幾個volume讓你所想要蒐集的log,能夠share到filebeat的container,如此一來就可以透過一個filebeat服務,一次監聽多種log,進而上傳到elastic cloud,並可以透過多個Dashboard監控。
我們這次簡單實作多加一個Syslog,而蒐集的對象就是flask的container。
flask Dockerfile
FROM python:3.7.2-stretch
WORKDIR /app
ADD . /app
RUN apt-get update
RUN apt-get -y install rsyslog
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
CMD ["uwsgi", "wsgi.ini"]
首先我們先讓flask container中的debain系統,update apt以及安裝rsyslog,這個是能夠蒐集syslog的套件,而路徑會是在/var/log/syslog
接著我們要在filebeat的container中設定syslog的部分
system.yml
# Module: system
# Docs: https://www.elastic.co/guide/en/beats/filebeat/7.9/filebeat-module-system.html
- module: system
# Syslog
syslog:
enabled: true
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
var.paths: ["/var/log/syslog*"]
# Authorization logs
auth:
enabled: false
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
#var.paths:
我們這邊設定路徑為 /var/log/syslog
filebeat Dockerfile
FROM docker.elastic.co/beats/filebeat:7.9.2
COPY filebeat.yml /usr/share/filebeat/filebeat.yml
USER root
RUN chown root:filebeat /usr/share/filebeat/filebeat.yml
USER filebeat
RUN filebeat modules enable nginx system
COPY nginx.yml /usr/share/filebeat/modules.d/nginx.yml
COPY system.yml /usr/share/filebeat/modules.d/system.yml
加入system.yml以及enable system module
最後就是同樣要在compose下設置
version: '3.3'
services:
flask:
build: ./flask
volumes:
- "/c/Users/user/flask-nginx-elk-demo/syslog:/var/log/syslog"
container_name: template_flask
# restart: always
environment:
- APP_NAME=FlaskApp
expose:
- 8080
nginx:
build: ./nginx
volumes:
- "/c/Users/user/flask-nginx-elk-demo/nginx-logs:/var/log/nginx"
container_name: template_nginx
# restart: always
ports:
- "80:80"
depends_on:
- flask
filebeat:
build: ./filebeat
volumes:
- "/c/Users/user/flask-nginx-elk-demo/nginx-logs:/var/log/nginx"
- "/c/Users/user/flask-nginx-elk-demo/syslog:/var/log/syslog"
container_name: template_filebeat
# restart: always
depends_on:
- nginx
將flask container以及filebeat加入volume
如此一來就可以同時蒐集兩者,並且將這兩者都導到本機備份